package com.yida.system.service;

import java.util.List;
import java.util.Map;

import com.yida.system.api.domain.SysArea;
import com.yida.system.domain.SysUserArea;
import com.yida.system.domain.vo.TreeSelect;

/**
 * 系统地区Service接口
 * 
 * @author hmh
 * @date 2022-11-08
 */
public interface ISysAreaService 
{
    /**
     * 查询系统地区
     * 
     * @param areaId 系统地区主键
     * @return 系统地区
     */
    public SysArea selectSysAreaByAreaId(Long areaId);
    
    
    /**
     * 根据用户编号查询绑定地区
     * 
     * @param areaId 系统地区主键
     * @return 系统地区
     */
    public List<SysArea> selectSysAreaByUserId(Long userId);
    
    /**
     * 根据用户编号查询绑定地区
     * 
     * @param areaId 系统地区主键
     * @return 系统地区
     */
    public String selectSysAreaToStringByUserId(Long userId);

    /**
     * 查询系统地区列表
     * 
     * @param sysArea 系统地区
     * @return 系统地区集合
     */
    public List<SysArea> selectSysAreaList(SysArea sysArea);

    /**
     * 新增系统地区
     * 
     * @param sysArea 系统地区
     * @return 结果 
     */
    public int insertSysArea(SysArea sysArea);

    /**
     * 修改系统地区
     * 
     * @param sysArea 系统地区
     * @return 结果
     */
    public int updateSysArea(SysArea sysArea);

    /**
     * 批量删除系统地区
     * 
     * @param areaIds 需要删除的系统地区主键集合
     * @return 结果
     */
    public int deleteSysAreaByAreaIds(Long[] areaIds);

    /**
     * 删除系统地区信息
     * 
     * @param areaId 系统地区主键
     * @return 结果
     */
    public int deleteSysAreaByAreaId(Long areaId);
    
    /**
     * 加载参数缓存数据
     */
    public void loadingAreaCache();
    
    /**
     * 根据地区编号获取树结构
     * 20221109
     * hmh
     * @param areaId 系统地区主键
     * @return 结果
     */
    public List<TreeSelect> selectAreaTreeByAreaId(Long areaId);
    
    /**
     * 根据地区编号和地区集合组装树结构
     * 20221109
     * hmh
     * @param areaId 系统地区主键
     * @return 结果
     */
    public List<TreeSelect> selectAreaTreeByAreaId(Long areaId,List<SysArea> sysAreaList);
    
    /**
     * 根据地区编号组获取对于地区下拉列表，及街道数据
     * 20221109
     * hmh
     * @param areaId 系统地区主键
     * @return 结果
     */
    public Map<String,Object> getAreaStreetInfoByAreaId(String areaIds);
    
    /**
     * 根据地区编号组获取对于地区下拉列表，及街道数据
     * 20221213
     * hmh
     * @param areaIds 地区组
     * @return 结果
     */
    public List<TreeSelect> getAreaTreeInfoByAreaIds(String areaIds);
    
    /**
     * 根据地区组查询地区信息
     * 20221109
     * hmh
     * @param areaIds	系统地区组
     * @return 结果
     */
    public List<SysArea> getAreaByAreaIds(String areaIds);
    
    /**
     * 获取指定类型数据
     * 20221109
     * hmh
     * @param areaId 系统地区主键
     * @return 结果
     */
    public List<TreeSelect> selectAreaInfoByAreaType(int type);
    
    /**
     * 根据地区编号组获取树结构
     * 20221109
     * hmh
     * @param areaId 系统地区主键
     * @return 结果
     */
    public List<TreeSelect> selectAreaTreeByAreaIdArry(Long[] areaId);
    
    /**
     * 判断当前操作的地区名是否重复
     * @param sysArea 地区信息
     * @return true/false
     */
    public boolean checkAreaName(SysArea sysArea); 
    
    /**
     * 检测地区是否允许修改
     * @param sysArea 地区信息
     * @return 
     */
    public void checkAreaAllowed(SysArea sysArea); 
    
    /**
     * 检测地区是否允许修改
     * @param areaId 地区ID
     * @return true/false
     */
    public void checkAreaAllowed(Long areaId); 
    
    /**
     * 插入用户地区组
     * @param userId
     * @param areaIds
     */
    public int insertUserAreas(Long userId,Long[] areaIds);
    
    /**
     * 解除用户地区绑定
     * @param sysUserArea 用户地区关联
     * @return
     */
    public int deleteBindUser(SysUserArea sysUserArea);
    
    /**
     * 批量解除用户地区绑定
     * @param sysUserArea 用户地区关联
     * @return
     */
    public int deleteBindUsers(Long areaId,Long[] userIds);
    
    
}
